package com.example.deepseek.model;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * 聊天会话模型类
 * 用于表示用户与DeepSeek AI的一次会话交互
 */
@Data
@NoArgsConstructor
public class ChatSession implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 会话唯一标识
     */
    private String id;

    /**
     * 会话名称
     */
    private String name;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 最后更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 会话包含的消息列表
     */
    private List<Message> messages = new ArrayList<>();

    /**
     * 创建一个新的聊天会话，使用指定名称
     *
     * @param name 会话名称
     */
    public ChatSession(String name) {
        this.id = UUID.randomUUID().toString();
        this.name = name;
        this.createTime = LocalDateTime.now();
        this.updateTime = LocalDateTime.now();
    }

    /**
     * 向会话中添加新消息
     * 同时更新会话的最后修改时间
     *
     * @param message 要添加的消息
     */
    public void addMessage(Message message) {
        this.messages.add(message);
        this.updateTime = LocalDateTime.now();
    }

    /**
     * 获取会话中最后一条消息
     *
     * @return 最后一条消息，如果没有消息则返回null
     */
    public Message getLastMessage() {
        if (messages.isEmpty()) {
            return null;
        }
        return messages.get(messages.size() - 1);
    }

    /**
     * 获取会话摘要，用于在会话列表中显示
     *
     * @param maxLength 摘要最大长度
     * @return 消息摘要文本
     */
    public String getSummary(int maxLength) {
        Message lastMessage = getLastMessage();
        if (lastMessage == null) {
            return "无消息";
        }

        String content = lastMessage.getContent();
        if (content.length() <= maxLength) {
            return content;
        }

        return content.substring(0, maxLength) + "...";
    }

    /**
     * 清空会话中的所有消息
     */
    public void clearMessages() {
        this.messages.clear();
        this.updateTime = LocalDateTime.now();
    }

    /**
     * 获取会话中的消息数量
     *
     * @return 消息数量
     */
    public int getMessageCount() {
        return this.messages.size();
    }
}